Проба Матем1.
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ ПроМатем1+;
(******************************************************************************
 * НАЗНАЧЕНИЕ: проверка точности вычислений трансцендентных функций
 *
 * ПРИМЕЧАНИЯ: 
 *   Для каждого типа функции выбирается 20 случайных возрастающих
 * значений аргумента. Далее для каждого значения вычисляется прямая функция,
 * а к результатам применяется обратная функция. Потом вычисляется
 * относительная ошибка результатов и первоначальных значений аргумента.
 ******************************************************************************)
ИСПОЛЬЗУЕТ
  Матем ИЗ "...\Отделы\Числа\",
  Вывод ИЗ "...\Отделы\Обмен\";

ПОСТ
  АРГУМЕНТОВ = 20; (* число аргументов *)

ВИД
  Вещ     = Матем.Вещ;
  Функция = ЗАДАЧА(x:Вещ):Вещ;
  Вектор  = РЯД АРГУМЕНТОВ+1 ИЗ Вещ;

(******************************************************************************)
ЗАДАЧА СлучАрг(x+:Вектор; от,до:Вещ);
(* Заполняет вектор аргументов случайными числами от <от> до <до>,
 * округляет до 4-го знака после запятой и располагает в возрастающем порядке.*)
ПЕР
  i,j,k:ЦЕЛ;
  a:Вещ;
УКАЗ
  ОТ i:=1 ДО АРГУМЕНТОВ ВЫП
    a:=(до-от)*Матем.случ() + от;
    ЕСЛИ МОДУЛЬ(a) < 1.D-4 ТО
      a:=Матем.знак(a)*1.D-4
    КОН;
    x[i]:=ВШИРЦЕЛ(10000*a)/10000;
  КОН;
  (* Сортировка вставками *)
  ОТ i:=1 ДО АРГУМЕНТОВ-1 ВЫП
    k:=i;
    a:=x[i];
    ОТ j:=i+1 ДО АРГУМЕНТОВ ВЫП
      ЕСЛИ x[j] < a ТО
        k:=j;
        a:=x[j]
      КОН 
    КОН;
    Матем.обмен(x[i],x[k])
  КОН
КОН СлучАрг;

(******************************************************************************)
ЗАДАЧА Оборот(прямИмя-,обрИмя-:ЦЕПЬ; прямФ,обрФ:Функция; от,до:Вещ);
ПЕР
  i:ЦЕЛ;
  x0:Вектор;
  y,x1,оо:Вещ;
УКАЗ
  Вывод.Цепь('^x0, y=');
  Вывод.Цепь(прямИмя);
  Вывод.Цепь('(x0), x1=');
  Вывод.Цепь(обрИмя);
  Вывод.Цепь('(y), относ.ошибка^');
  СлучАрг(x0,от,до);
  ОТ i:=1 ДО АРГУМЕНТОВ ВЫП
    y:=прямФ(x0[i]);
    x1:=обрФ(y);
    оо:=(x0[i]-x1)/x0[i];
    Вывод.ЧВещ('%8.4f %23e %23e %15.4e^',x0[i],y,x1,оо)
  КОН
КОН Оборот;

УКАЗ
  Оборот('exp'  ,'ln'    ,Матем.exp  ,Матем.ln    ,-10,10);
  Оборот('exp10','log10' ,Матем.exp10,Матем.log10 , -5, 5);
  Оборот('exp2' ,'log2'  ,Матем.exp2 ,Матем.log2  ,-15,15);
  Оборот('sin'  ,'arcsin',Матем.sin  ,Матем.arcsin,-Матем.ПИ/2,Матем.ПИ/2);
  Оборот('cos'  ,'arccos',Матем.cos  ,Матем.arccos,  0,Матем.ПИ);
  Оборот('tg'   ,'tg'    ,Матем.tg   ,Матем.arctg ,-Матем.ПИ/2,Матем.ПИ/2);
  Оборот('sh'   ,'sh'    ,Матем.sh   ,Матем.Arsh  ,  0, 5);
  Оборот('ch'   ,'ch'    ,Матем.ch   ,Матем.Arch  ,  0, 5);
  Оборот('th'   ,'th'    ,Матем.th   ,Матем.Arth  , -5, 5);
КОН ПроМатем1.




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы